
#include <iostream>
#include "TestEscenario.h"
#include "Escenario.h"
#include "Grilla.h"
#include "Camino.h"
#include "Obstaculo.h"
#include "Bonus.h"


void TestEscenario::runTestEscenario(){

	Grilla grilla(1,2);
	Escenario* escenario = Escenario::getInstance();
	escenario->setNombre("Defaul");
	escenario->setGrilla(&grilla);
	
	try{
		
		delete Escenario::getInstance()->getGrilla()->getCasillero(0,0)->getContenido();
		Contenido* camino00 = new Camino();
		Escenario::getInstance()->getGrilla()->getCasillero(0,0)->setContenido(camino00);

	}catch (PositionOutOfBoundException* e) {
		
		std::cout << "Error al intentar obtener una posicion de la grilla no valida" << std::endl;
	}
	
	try{
	
		delete Escenario::getInstance()->getGrilla()->getCasillero(0,1)->getContenido();
		Contenido* camino01 = new Camino();
		Bonus* bonus10 = new Bonus("Frutilla");
		bonus10->setTextura('F');
		((Camino*)camino01)->setBonus(bonus10);
		Escenario::getInstance()->getGrilla()->getCasillero(0,1)->setContenido(camino01);

	}catch (PositionOutOfBoundException* e) {
		
		std::cout << "Error al intentar obtener una posicion de la grilla no valida" << std::endl;
	}
	
	try {

		delete Escenario::getInstance()->getGrilla()->getCasillero(0,2)->getContenido();
		Contenido* camino02 = new Camino();
		Escenario::getInstance()->getGrilla()->getCasillero(0,2)->setContenido(camino02);
	
	} catch (PositionOutOfBoundException* e){

		std::cout << "Error al intentar obtener una posicion de la grilla no valida" << std::endl;
	}
	
	try {
	
		delete Escenario::getInstance()->getGrilla()->getCasillero(1,2)->getContenido();
		Contenido* camino12 = new Camino();
		Escenario::getInstance()->getGrilla()->getCasillero(1,2)->setContenido(camino12);

	}catch (PositionOutOfBoundException* e){
		
		std::cout << "Error al intentar obtener una posicion de la grilla no valida" << std::endl;
	}
	
	try {
	
		delete Escenario::getInstance()->getGrilla()->getCasillero(0,3)->getContenido();
		Contenido* camino03 = new Camino();
		Escenario::getInstance()->getGrilla()->getCasillero(0,3)->setContenido(camino03);

	} catch (PositionOutOfBoundException* e){
	
		std::cout << "Error al intentar obtener una posicion de la grilla no valida" << std::endl;
	}
	
	try {
	
		delete Escenario::getInstance()->getGrilla()->getCasillero(2,3)->getContenido();
		Contenido* camino23 = new Camino();
		Escenario::getInstance()->getGrilla()->getCasillero(2,3)->setContenido(camino23);

	} catch (PositionOutOfBoundException* e){
	
		std::cout << "Error al intentar obtener una posicion de la grilla no valida" << std::endl;
	}
	
	try {
		delete Escenario::getInstance()->getGrilla()->getCasillero(1,1)->getContenido();
		Contenido* obstaculo11 = new Obstaculo();
		obstaculo11->setTextura('#');
		Escenario::getInstance()->getGrilla()->getCasillero(1,1)->setContenido(obstaculo11);
	
	} catch (PositionOutOfBoundException* e){
	
		std::cout << "Error al intentar obtener una posicion de la grilla no valida" << std::endl;
	}
	escenario->imprimir();

}

void TestEscenario::runTest(){

	this->runTestEscenario();
}
